package cvo.pro4.chess.client.entities.pieces;

import java.util.ArrayList;
import java.util.List;

import cvo.pro4.chess.client.GameFacade;
import cvo.pro4.chess.client.entities.BoardCoordinates;
import cvo.pro4.chess.client.entities.Color;
import cvo.pro4.chess.client.entities.Game;
import cvo.pro4.chess.client.entities.Piece;
import cvo.pro4.chess.client.entities.Tile;
import cvo.pro4.chess.client.exceptions.IllegalCoordinatesException;

/**
 * 
 * @author Ricardo Cappelle
 * 
 */
public class Rook extends Piece {

	private enum DIRECTION {
		UP, DOWN, RIGHT, LEFT
	};

	public Rook(Color color) {
		super(color);
		setName("Rook");
	}

	@Override
	public void move(BoardCoordinates coordinates) {
		// TODO Auto-generated method stub
	}

	/*
	 * getPossibleMoves van Rook (toren) kijkt welke coordinaten er vanuit zijn
	 * positie mogelijk zijn. coordinaten buiten het bord worden geweerd
	 * coordinaten waar al een andere piece opstaat van zijn kleur worden
	 * geweerd coordinaten waardoor de koning schaak staat, worden geweerd
	 */

	public List<BoardCoordinates> getPossibleMoves()
			throws IllegalCoordinatesException {
		List<BoardCoordinates> possibleMoves = new ArrayList<BoardCoordinates>();

		BoardCoordinates currentPosition = this.getCurrentPosition();
		BoardCoordinates possiblePosition = null;

		// if(!Game.getGame().getBoard().isKingChecked(this.getColor(),currentPosition){
		// return possibleMoves=null;
		// }else{

		for (int direction = 0; direction < 2; direction++) {
			int h, v = 0;

			for (int j = 0; j < 2; j++) {
				cycle8: for (int i = 1; i < 8; i++) {
					if (j == 0) {
						i = i;
					} else {
						i = -i;
					}
					if (direction == 0) {
						h = i;
					} else {
						v = i;
					}
					possiblePosition = BoardCoordinates.create(
							currentPosition.getX() + i, currentPosition.getY()
									+ i);
					// eerst uit de cyclus springen als coordinaat niet
					// correct--> met try catch opvangen, "catchen" wilt hier
					// zeggen, break uit de forloop en ga naar de volgende.

					// staat er een pion op de tile? neen? coordinaat toevoegen
					// aan list
					if (!Game.getGame().getBoard().getTileAt(possiblePosition)
							.getIsOccupied()) {
						// staat er een pion van de eigen kleur op de tile?
						possibleMoves.add(possiblePosition);

					} else {
						if (Game.getGame().getBoard().getMapping()
								.get(possiblePosition).getColor() != this
								.getColor()) {
							possibleMoves.add(possiblePosition);
							break cycle8;
						}
					}
				}
			}
		}
		return possibleMoves;
	}
	// }->sluiting van "iskingchecked"
}
